<!doctype html>



  


<html class="theme-next mist use-motion" lang="zh-Hans">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>



<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />















  
  
  <link href="/blog/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />




  
  
  
  

  
    
    
  

  

  

  

  

  
    
    
    <link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
  






<link href="/blog/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css" />

<link href="/blog/css/main.css?v=5.1.0" rel="stylesheet" type="text/css" />


  <meta name="keywords" content="HTTP,网络协议," />








  <link rel="shortcut icon" type="image/x-icon" href="/blog/favicon.ico?v=5.1.0" />






<meta name="description" content="HTTP Http是一个属于应用层的传输协议。数据传输层的协议是TCP。 而我们在开发中使用的Socket就是对TCP协议的封装。 因为使用TCP协议，所以HTTP可以提供：可靠交付，双全功，面向字节流的点对点服务。  HTTP、TCP/IP、网络分层模型我们知道HTTP协议由TCP/IP协议，那么他们究竟是什么关系？网络分层模型具体是什么？ 网络分层模型我们知道网络分层概念。最上层是应用层，最下">
<meta name="keywords" content="HTTP,网络协议">
<meta property="og:type" content="article">
<meta property="og:title" content="HTTP协议">
<meta property="og:url" content="https://gitee.com/shuhao/2018/04/11/HTTP协议/index.html">
<meta property="og:site_name" content="Niki">
<meta property="og:description" content="HTTP Http是一个属于应用层的传输协议。数据传输层的协议是TCP。 而我们在开发中使用的Socket就是对TCP协议的封装。 因为使用TCP协议，所以HTTP可以提供：可靠交付，双全功，面向字节流的点对点服务。  HTTP、TCP/IP、网络分层模型我们知道HTTP协议由TCP/IP协议，那么他们究竟是什么关系？网络分层模型具体是什么？ 网络分层模型我们知道网络分层概念。最上层是应用层，最下">
<meta property="og:locale" content="zh-Hans">
<meta property="og:image" content="https://gitee.com/blog/images/HTTP/network_model.jpg">
<meta property="og:image" content="https://gitee.com/blog/images/HTTP/http_relation.png">
<meta property="og:image" content="https://gitee.com/blog/images/HTTP/data_transport.png">
<meta property="og:image" content="https://gitee.com/blog/images/HTTP/http_three_hands.png">
<meta property="og:image" content="https://gitee.com/blog/images/HTTP/http_four_hand.png">
<meta property="og:image" content="https://gitee.com/blog/images/HTTP/http_ssl_1.png">
<meta property="og:image" content="https://gitee.com/blog/images/HTTP/http_ssl_error.png">
<meta property="og:updated_time" content="2018-05-24T11:08:05.287Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="HTTP协议">
<meta name="twitter:description" content="HTTP Http是一个属于应用层的传输协议。数据传输层的协议是TCP。 而我们在开发中使用的Socket就是对TCP协议的封装。 因为使用TCP协议，所以HTTP可以提供：可靠交付，双全功，面向字节流的点对点服务。  HTTP、TCP/IP、网络分层模型我们知道HTTP协议由TCP/IP协议，那么他们究竟是什么关系？网络分层模型具体是什么？ 网络分层模型我们知道网络分层概念。最上层是应用层，最下">
<meta name="twitter:image" content="https://gitee.com/blog/images/HTTP/network_model.jpg">



<script type="text/javascript" id="hexo.configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/blog/',
    scheme: 'Mist',
    sidebar: {"position":"right","display":"post","offset":12,"offset_float":0,"b2t":false,"scrollpercent":false},
    fancybox: true,
    motion: true,
    duoshuo: {
      userId: '0',
      author: '博主'
    },
    algolia: {
      applicationID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    }
  };
</script>



  <link rel="canonical" href="https://gitee.com/shuhao/2018/04/11/HTTP协议/"/>





  <title> HTTP协议 | Niki </title>
</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">

  





  <script type="text/javascript">
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?cb9f0585e406f878cb2f29c89ad3cdb7";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
  </script>










  
  
    
  

  <div class="container one-collumn sidebar-position-right page-post-detail ">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-wrapper">
  <div class="site-meta ">
    

    <div class="custom-logo-site-title">
      <a href="/blog/"  class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">Niki</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
      
        <p class="site-subtitle">天道酬勤</p>
      
  </div>

  <div class="site-nav-toggle">
    <button>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
    </button>
  </div>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        <li class="menu-item menu-item-home">
          <a href="/blog/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />
            
            首页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-categories">
          <a href="/blog/categories" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-categories"></i> <br />
            
            分类
          </a>
        </li>
      
        
        <li class="menu-item menu-item-archives">
          <a href="/blog/archives" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
            
            归档
          </a>
        </li>
      
        
        <li class="menu-item menu-item-tags">
          <a href="/blog/tags" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-tags"></i> <br />
            
            标签
          </a>
        </li>
      

      
    </ul>
  

  
</nav>



 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
    <link itemprop="mainEntityOfPage" href="https://gitee.com/shuhao/blog/2018/04/11/HTTP协议/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Fang ShuHao">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/blog/images/head.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Niki">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                HTTP协议
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">发表于</span>
              
              <time title="创建于" itemprop="dateCreated datePublished" datetime="2018-04-11T09:58:48+08:00">
                2018-04-11
              </time>
            

            

            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">分类于</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/blog/categories/HTTP/" itemprop="url" rel="index">
                    <span itemprop="name">HTTP</span>
                  </a>
                </span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        <h2 id="HTTP"><a href="#HTTP" class="headerlink" title="HTTP"></a>HTTP</h2><ul>
<li>Http是一个属于应用层的传输协议。数据传输层的协议是TCP。</li>
<li>而我们在开发中使用的Socket就是对TCP协议的封装。</li>
<li>因为使用TCP协议，所以HTTP可以提供：可靠交付，双全功，面向字节流的点对点服务。</li>
</ul>
<h3 id="HTTP、TCP-IP、网络分层模型"><a href="#HTTP、TCP-IP、网络分层模型" class="headerlink" title="HTTP、TCP/IP、网络分层模型"></a>HTTP、TCP/IP、网络分层模型</h3><p>我们知道HTTP协议由TCP/IP协议，那么他们究竟是什么关系？网络分层模型具体是什么？</p>
<h4 id="网络分层模型"><a href="#网络分层模型" class="headerlink" title="网络分层模型"></a>网络分层模型</h4><p>我们知道网络分层概念。最上层是应用层，最下层是物理层。分层方式有两种：七层网络模型、四层网络模型；如下图所示：<br><img src="/blog/images/HTTP/network_model.jpg"></p>
<table>
<thead>
<tr>
<th>网络层</th>
<th style="text-align:center">说明</th>
<th style="text-align:center">协议</th>
</tr>
</thead>
<tbody>
<tr>
<td>应用层</td>
<td style="text-align:center">该层定义了应用如何识别网络上传输数据的协议</td>
<td style="text-align:center">HTTP、FTP、SMTP、SSH</td>
</tr>
<tr>
<td>表示层</td>
<td style="text-align:center">该层指数据的表示。所以该层主要功能：转换，压缩和加密</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td>会话层</td>
<td style="text-align:center">网络通信过程中两个进程交换数据的逻辑。例如：单向，半全工，双全工</td>
<td style="text-align:center">TLS、RPC、BSD sockets</td>
</tr>
<tr>
<td>运输层</td>
<td style="text-align:center">规定了网络中的数据传输的协议。与应用层规定的协议不同，运输层数据传输的格式与具体应用无关，网络中的数据都运用该协议进行封装然后在网络间传输。</td>
<td style="text-align:center">TCP、UDP</td>
</tr>
<tr>
<td>网络层</td>
<td style="text-align:center">数据如何在设备之间进行传输。也就是一台设备如何找到另一台设备。所以网络层需要提供三个最基本的功能：地址、路由、分段和重组</td>
<td style="text-align:center">IP</td>
</tr>
<tr>
<td>数据链路层</td>
<td style="text-align:center">数据如何发送到本地网络中</td>
<td style="text-align:center">以太网、令牌环、HDLC、帧中继</td>
</tr>
<tr>
<td>物理层</td>
<td style="text-align:center">数据在设备之间进行传输时采用的物理设备</td>
<td style="text-align:center">线路、无线电、光纤、信鸽</td>
</tr>
</tbody>
</table>
<p>四层网络模型就是把表示层、会话层、运输层合并为：运输层；是数据链路层、物理层合并为：网络接口层</p>
<h4 id="HTTP与TCP-IP的关系"><a href="#HTTP与TCP-IP的关系" class="headerlink" title="HTTP与TCP IP的关系"></a>HTTP与TCP IP的关系</h4><p>从分层模型来看，HTTP是我们的应用层协议，其运输层采用的协议为TCP协议；网络层采取的协议为IP协议。因此他们的关系大致为：一个并集的关系。<br><img src="/blog/images/HTTP/http_relation.png"><br>这种数据封装的方式是不是有点像java里面的装饰器模式。每一层都是一个装饰器，对应用层的数据进行装饰以得到最后在网络上面传输的数据</p>
<h4 id="数据如何在各网络层间传输的"><a href="#数据如何在各网络层间传输的" class="headerlink" title="数据如何在各网络层间传输的"></a>数据如何在各网络层间传输的</h4><p>当需要在网络中传输数据时，各网络层会对数据进行层层封装。如下图<br><img src="/blog/images/HTTP/data_transport.png"></p>
<h2 id="HTT协议构成"><a href="#HTT协议构成" class="headerlink" title="HTT协议构成"></a>HTT协议构成</h2><h3 id="请求方法"><a href="#请求方法" class="headerlink" title="请求方法"></a>请求方法</h3><p>目前HTTP支持8中请求方法 GET,POST,PUT,DELETE(常用四个),HEAD,OPTIONS,TRACE,CONONECT</p>
<h3 id="头信息"><a href="#头信息" class="headerlink" title="头信息"></a>头信息</h3><p>HTTP的请求和响应都包含请求头信息。请求头信息主要约定了HTTP协议的内容，以及请求内容的一些属性。</p>
<h3 id="请求"><a href="#请求" class="headerlink" title="请求"></a>请求</h3><p>客户端发送请求的数据</p>
<h3 id="响应"><a href="#响应" class="headerlink" title="响应"></a>响应</h3><p>服务端返回给客户端的响应数据</p>
<h2 id="HTTP握手、断开连接"><a href="#HTTP握手、断开连接" class="headerlink" title="HTTP握手、断开连接"></a>HTTP握手、断开连接</h2><h3 id="TCP传输相关报文"><a href="#TCP传输相关报文" class="headerlink" title="TCP传输相关报文"></a>TCP传输相关报文</h3><ol>
<li>seq（序号）：TCP连接字节流中每一个字节都会有一个编号，而本字段的值指的是本报文段所发送数据部分第一个字节的序号。</li>
<li>ack（确认号）：表示期望收到的下一个报文段数据部分的第一个字节的编号，编号为ack-1及以前的字节已经收到。</li>
<li>SYN：当本字段为1时，表示这是一个连接请求或者连接接受报文。</li>
<li>ACK：仅当本字段为1时，确认号才有效。</li>
<li>FIN：用来释放一个连接。当本字段为1时，表示此报文段的发送端数据已发送完毕，要求释放运输连接。</li>
</ol>
<h3 id="握手"><a href="#握手" class="headerlink" title="握手"></a>握手</h3><p>HTTP协议建立连接需要进行三次握手流程client端发送SYN包到server端，并且进入SYN_SEND状态，等待服务确认</p>
<ol>
<li>（SYN=1 seq=i）</li>
<li>server端收到客户端发送的SYN包，发送一个确认连接包SYN、ACK到客户端，并且进入SYN_RECV状态 (SYN=1 ACK=1 seq=j ack=i+1)</li>
<li>client端收到服务器的SYN+ACK包向server端发送ACK包 发送完毕后client和server进入ESTABLISHED状态，完成三次握手，进行数据传输 (ACK=1 ack=j+1 seq=j+1)<img src="/blog/images/HTTP/http_three_hands.png">
</li>
</ol>
<h3 id="断开连接"><a href="#断开连接" class="headerlink" title="断开连接"></a>断开连接</h3><p>HTTP 断开连接需要进行四次挥手流程</p>
<ol>
<li>数据传输结束后，客户端发送释放连接FIN报文，停止发送数据（FIN=1，seq=u）</li>
<li>服务端收到释放连接报文，发送确认ACK报文（ACK=1, ack=u+1, seq=v）本次连接进入半关闭状态，客户端不可向服务端发送数据，但服务端可以。</li>
<li>服务端没有向客户端发送的数据后，服务端再次向客户端发送确认释放报文FIN、ACK（FIN=1，ACK=1，ack=u+1 seq=w ACK=1）</li>
<li>客户端收到释放报文后，发出确认报文（ACK=1 ack=w+1 seq=u+1）,再经过2MSL（最长报文端寿命）后本次TCP连接接收。<img src="/blog/images/HTTP/http_four_hand.png">
</li>
</ol>
<h2 id="为什么http不安全"><a href="#为什么http不安全" class="headerlink" title="为什么http不安全"></a>为什么http不安全</h2><p>因为HTTP传输过程中，所有的消息都是明文，如果有第三方劫持了你的请求，那么可以做：</p>
<ol>
<li>将请求的server地址修改，让你永远无法访问正确的Service</li>
<li>劫持请求，获取请求的内容。甚至获取密码等敏感信息</li>
<li>劫持响应内容，返回错误的内容类似钓鱼网站</li>
</ol>
<h2 id="HTTPS如何保证安全"><a href="#HTTPS如何保证安全" class="headerlink" title="HTTPS如何保证安全"></a>HTTPS如何保证安全</h2><ol>
<li>采用非对称加密的方式，传输加密数据用的密钥。</li>
<li>HTTPS为了保证请求内容的安全，会对传输的所有数据进行加密。采用的是对称加密。即使获取到了消息，没有密钥也无法解密消息。<br>那么这些是什么样的流程：</li>
<li>服务端把公钥传给客户端，自己保留私钥</li>
<li>客户端拿到公钥后，加密数据密钥并传给服务端</li>
<li>服务端使用私钥，解密数据密钥</li>
<li>客户端用数据密钥加密传输的数据，发送给服务端</li>
<li>服务端收到数据，用私钥解密后的数据密钥解密数据，并且同样用数据密钥加密响应数据传输给客户端<img src="/blog/images/HTTP/http_ssl_1.png">
</li>
</ol>
<p>是不是这样的流程就是安全的呢？</p>
<ol>
<li>假设我们有伪服务端，截获了服务端给客户端的公钥，并且把自己的公钥发给客户端</li>
<li>客户端收到了假的公钥，采用假的公钥发送数据密钥</li>
<li>伪服务端同样截获客户端使用假的公钥加密的数据密钥，并且使用自己的私钥解开了数据密钥，便获得了客户端加密数据用的数据密钥</li>
<li>伪服务端，使用截获的服务端的公钥，加密截获的数据密钥并发送给真正的服务端</li>
<li>伪服务端截获客户端发送的请求数据，并且使用数据密钥解密数据内容，进行伪造后 再次加密发送到客户端。这样可以拦截和伪造服务端数据</li>
<li>伪服务端截获服务端发送的响应数据，采用数据密钥加密解密数据后，可以伪造响应数据。<img src="/blog/images/HTTP/http_ssl_error.png">
</li>
</ol>
<p>上面的安全漏洞造成的主要原因就是客户端无法也验证服务端的身份，不能验证接收到的公钥就是目的服务端发出的。为了提供身份验证，我们使用了CA证书</p>
<h2 id="为什么要使用CA证书"><a href="#为什么要使用CA证书" class="headerlink" title="为什么要使用CA证书"></a>为什么要使用CA证书</h2><p>使用CA证书来验证服务端的合法性。从而避免中间服务的漏洞</p>
<p><a href="https://zhuanlan.zhihu.com/p/24860403" target="_blank" rel="external">TCP连接的简历与释放（三次握手，四次挥手）</a></p>

      
    </div>

    <div>
      
        

      
    </div>

    <div>
      
        

      
    </div>


    <footer class="post-footer">
      
        <div class="post-tags">
          
            <a href="/blog/tags/HTTP/" rel="tag"># HTTP</a>
          
            <a href="/blog/tags/网络协议/" rel="tag"># 网络协议</a>
          
        </div>
      

      
        
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/blog/2018/04/05/命令设计模式/" rel="next" title="命令设计模式">
                <i class="fa fa-chevron-left"></i> 命令设计模式
              </a>
            
          </div>

          <span class="post-nav-divider"></span>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/blog/2018/04/11/sql查询优化—limit/" rel="prev" title="sql查询优化—limit">
                sql查询优化—limit <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </article>



    <div class="post-spread">
      
    </div>
  </div>

          
          </div>
          


          
  <div class="comments" id="comments">
    
      <div id="lv-container" data-id="city" data-uid="MTAyMC8zNjY5NS8xMzIzMA=="></div>
    
  </div>


        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
            文章目录
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview">
            站点概览
          </li>
        </ul>
      

      <section class="site-overview sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
          <img class="site-author-image" itemprop="image"
               src="/blog/images/head.jpg"
               alt="Fang ShuHao" />
          <p class="site-author-name" itemprop="name">Fang ShuHao</p>
           
              <p class="site-description motion-element" itemprop="description"></p>
          
        </div>
        <nav class="site-state motion-element">
        
          
            <div class="site-state-item site-state-posts">
              <a href="/blog/archives">
                <span class="site-state-item-count">135</span>
                <span class="site-state-item-name">日志</span>
              </a>
            </div>
          

          
            <div class="site-state-item site-state-categories">
              <a href="/blog/categories">
                <span class="site-state-item-count">35</span>
                <span class="site-state-item-name">分类</span>
              </a>
            </div>
          

          
            <div class="site-state-item site-state-tags">
              <a href="/blog/tags">
                <span class="site-state-item-count">93</span>
                <span class="site-state-item-name">标签</span>
              </a>
            </div>
          

        </nav>

        

        <div class="links-of-author motion-element">
          
        </div>

        
        

        
        

        


      </section>

      
      <!--noindex-->
        <section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
          <div class="post-toc">

            
              
            

            
              <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#HTTP"><span class="nav-number">1.</span> <span class="nav-text">HTTP</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#HTTP、TCP-IP、网络分层模型"><span class="nav-number">1.1.</span> <span class="nav-text">HTTP、TCP/IP、网络分层模型</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#网络分层模型"><span class="nav-number">1.1.1.</span> <span class="nav-text">网络分层模型</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#HTTP与TCP-IP的关系"><span class="nav-number">1.1.2.</span> <span class="nav-text">HTTP与TCP IP的关系</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#数据如何在各网络层间传输的"><span class="nav-number">1.1.3.</span> <span class="nav-text">数据如何在各网络层间传输的</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#HTT协议构成"><span class="nav-number">2.</span> <span class="nav-text">HTT协议构成</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#请求方法"><span class="nav-number">2.1.</span> <span class="nav-text">请求方法</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#头信息"><span class="nav-number">2.2.</span> <span class="nav-text">头信息</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#请求"><span class="nav-number">2.3.</span> <span class="nav-text">请求</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#响应"><span class="nav-number">2.4.</span> <span class="nav-text">响应</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#HTTP握手、断开连接"><span class="nav-number">3.</span> <span class="nav-text">HTTP握手、断开连接</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#TCP传输相关报文"><span class="nav-number">3.1.</span> <span class="nav-text">TCP传输相关报文</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#握手"><span class="nav-number">3.2.</span> <span class="nav-text">握手</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#断开连接"><span class="nav-number">3.3.</span> <span class="nav-text">断开连接</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#为什么http不安全"><span class="nav-number">4.</span> <span class="nav-text">为什么http不安全</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#HTTPS如何保证安全"><span class="nav-number">5.</span> <span class="nav-text">HTTPS如何保证安全</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#为什么要使用CA证书"><span class="nav-number">6.</span> <span class="nav-text">为什么要使用CA证书</span></a></li></ol></div>
            

          </div>
        </section>
      <!--/noindex-->
      

      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright" >
  
  &copy; 
  <span itemprop="copyrightYear">2019</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">Fang ShuHao</span>
</div>


<div class="powered-by">
  由 <a class="theme-link" href="https://hexo.io">Hexo</a> 强力驱动
</div>

<div class="theme-info">
  主题 -
  <a class="theme-link" href="https://github.com/iissnan/hexo-theme-next">
    NexT.Mist
  </a>
</div>


        

        
      </div>
    </footer>

    
      <div class="back-to-top">
        <i class="fa fa-arrow-up"></i>
        
      </div>
    
    
  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>









  




  
  <script type="text/javascript" src="/blog/lib/jquery/index.js?v=2.1.3"></script>

  
  <script type="text/javascript" src="/blog/lib/fastclick/lib/fastclick.min.js?v=1.0.6"></script>

  
  <script type="text/javascript" src="/blog/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>

  
  <script type="text/javascript" src="/blog/lib/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/blog/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/blog/lib/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>


  


  <script type="text/javascript" src="/blog/js/src/utils.js?v=5.1.0"></script>

  <script type="text/javascript" src="/blog/js/src/motion.js?v=5.1.0"></script>



  
  

  
  <script type="text/javascript" src="/blog/js/src/scrollspy.js?v=5.1.0"></script>
<script type="text/javascript" src="/blog/js/src/post-details.js?v=5.1.0"></script>



  


  <script type="text/javascript" src="/blog/js/src/bootstrap.js?v=5.1.0"></script>



  



  




	





  





  





  
    <script type="text/javascript">
      (function(d, s) {
        var j, e = d.getElementsByTagName(s)[0];
        if (typeof LivereTower === 'function') { return; }
        j = d.createElement(s);
        j.src = 'https://cdn-city.livere.com/js/embed.dist.js';
        j.async = true;
        e.parentNode.insertBefore(j, e);
      })(document, 'script');
    </script>
  



  
  

  

  

  

  


  

</body>
</html>
